package cn.iocoder.yudao.module.system.convert.tenant;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.tenantfile.vo.TenantFileRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenantfile.TenantFileDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 租户 Convert
 *
 * @author 芋道源码
 */
@Mapper
public interface TenantFileConvert {

    TenantFileConvert INSTANCE = Mappers.getMapper(TenantFileConvert.class);

    default TenantFileRespVO convert0(TenantFileDO fileDO, Map<Long, AdminUserDO> userMap,  Map<Long, TenantDO> tenantMap) {
        TenantFileRespVO tenantFileRespVO = BeanUtils.toBean(fileDO, TenantFileRespVO.class);
        MapUtils.findAndThen(userMap, fileDO.getOwnerUserId(), (user) -> tenantFileRespVO.setOwnerUserName(user.getNickname()));
        MapUtils.findAndThen(tenantMap, fileDO.getTenantId(), (user) -> tenantFileRespVO.setTenantName(user.getName()));
        return tenantFileRespVO;
    }

    default PageResult<TenantFileRespVO> convert(PageResult<TenantFileDO> result1, Map<Long, AdminUserDO> userMap, Map<Long, TenantDO> tenantMap) {
        List<TenantFileRespVO> orderRespVOS = result1.getList().stream().map(data -> convert0(data, userMap, tenantMap)).collect(Collectors.toList());
        PageResult<TenantFileRespVO> result2 = new PageResult<>();
        result2.setList(orderRespVOS);
        result2.setTotal(result1.getTotal());
        return result2;
    }

}
